var obj = {
  a: 1
}
var obj2 = {
  a: 100
}

var a = 2;

function test(b, c) {
  // this默认 -> 全局对象window
  console.log(this.a, b, c)
}

test(); // 2
// call、apply 立即执行 传参格式不同
test.call(obj); // 1
test.apply(obj); // 1
test.call(obj, 3, 4); // 1 3 4
test.apply(obj, [3, 4]); // 1 3 4

// bind 不会立即执行，返回一个新的函数
var test1 = test.bind(obj, 3, 4);
test1(); // 1 3 4
// 只会生效一次(且是最先bind的生效)
var test2 = test1.bind(obj2, 3, 4);
test2(); // 1 3 4

var t = test.bind(obj, 3, 4).bind(obj2, 3, 4);
t(); // 1 3 4

